import 'dart:collection';

// import 'package:lib_basemodel/lib_basemodel.dart';
// import 'package:lib_im/lib_im.dart';
// import 'package:m_main/src/any_im/model/conversation_wrapper.dart';
// import 'package:quiver/collection.dart';

mixin ClassifyConversationMixin {
  /// 当前私聊的对象的convId
  String? currentChatConvId;

  // late LinkedHashMap<String, LinkedLruHashMap<String, ConversationWrapper>>
  //     conversationMap;

  // void classifyConversation(ConversationWrapper wrapper) {
  //   ConversationClassify? convClassify = getClassifyType(wrapper.it.ext);
  //   convClassify ??= getClassifyType(wrapper.latestMsg?.attributes);
  //   if (convClassify == null ||
  //       wrapper.latestMsg?.direction == MessageDirection.SEND) {
  //     convClassify = ConversationClassify.normal();
  //   }
  //   conversationMap.update(convClassify.type.toString(), (value) {
  //     value[wrapper.it.id] = wrapper;
  //     return value;
  //   }, ifAbsent: () {
  //     LinkedLruHashMap<String, ConversationWrapper> values =
  //         LinkedLruHashMap(maximumSize: 10000);
  //     values[wrapper.it.id] = wrapper;
  //     return values;
  //   });
  // }

  // Future<void> insertOrUpdateMap(EMMessage message) async {
  //   ConversationClassify? convClassify = getClassifyType(message.attributes);
  //   if (convClassify == null ||
  //       (convClassify.previous == null &&
  //           message.direction == MessageDirection.SEND)) {
  //     convClassify = ConversationClassify.normal();
  //   }
  //   if (conversationMap.containsKey(convClassify.type)) {
  //     var value = conversationMap[convClassify.type]!;
  //     await _insertOrUpdateConv(convClassify, value, message);
  //   } else {
  //     LinkedLruHashMap<String, ConversationWrapper> values =
  //         LinkedLruHashMap(maximumSize: 10000);
  //     await _insertOrUpdateConv(convClassify, values, message);
  //     conversationMap[convClassify.type] = values;
  //   }

  //   /// 如果有上次分组，且和当前不一样，需要从原分组里删除
  //   /// 如果原分组删除之后为空，需要从列表里剔除分组
  //   /// 如果不为空，需要更新分组显示信息
  //   if (convClassify.isDifferent &&
  //       conversationMap.containsKey(convClassify.previous!.type)) {
  //     conversationMap.update(convClassify.previous!.type, (value) {
  //       value.removeWhere((key, value) => key == message.conversationId);
  //       return value;
  //     });
  //     int len = conversationMap[convClassify.previous!.type]!.length;
  //     if (len <= 0) {
  //       /// 分组数据为空，删除列表的文件夹
  //       conversationMap.update(categoryNormal, (value) {
  //         value
  //             .removeWhere((key, value) => key == convClassify?.previous!.type);
  //         return value;
  //       });
  //     } else {
  //       conversationMap.update(categoryNormal, (value) {
  //         ConversationWrapper? wrapper =
  //             genConversationWrapper(convClassify!.previous!);
  //         if (wrapper != null) {
  //           value[wrapper.it.id] = wrapper;
  //         }
  //         return value;
  //       });
  //     }
  //   }

  //   /// 是归类
  //   if (convClassify.type != categoryNormal) {
  //     conversationMap.update(categoryNormal, (value) {
  //       ConversationWrapper? wrapper = genConversationWrapper(convClassify!);
  //       if (wrapper != null) {
  //         value[wrapper.it.id] = wrapper;
  //       }
  //       return value;
  //     }, ifAbsent: () {
  //       LinkedLruHashMap<String, ConversationWrapper> values =
  //           LinkedLruHashMap(maximumSize: 10000);
  //       ConversationWrapper? wrapper = genConversationWrapper(convClassify!);
  //       if (wrapper != null) {
  //         values[wrapper.it.id] = wrapper;
  //       }
  //       return values;
  //     });
  //   }
  // }

  // /// 插入或者更新会话
  // Future<void> _insertOrUpdateConv(
  //     ConversationClassify convClassify,
  //     LinkedLruHashMap<String, ConversationWrapper> conversations,
  //     EMMessage msg) async {
  //   if (conversations.containsKey(msg.conversationId)) {
  //     conversations[msg.conversationId]!.latestMsg = msg;
  //     if (currentChatConvId == msg.conversationId) {
  //       conversations[msg.conversationId]!.unReadNum = 0;
  //     } else {
  //       conversations[msg.conversationId]!.unReadNum =
  //           await conversations[msg.conversationId]!.it.unreadCount();
  //     }
  //     await conversations[msg.conversationId]!.refreshUser();
  //   } else {
  //     EMConversation? conv = await EMClient.getInstance.chatManager
  //         .getConversation(msg.conversationId ?? '');
  //     if (conv != null) {
  //       ConversationWrapper wrapper = ConversationWrapper(conv);
  //       await wrapper.inflate(newMsg: msg);
  //       conversations[msg.conversationId ?? ''] = wrapper;
  //     }
  //   }
  // }

  // /// 获取分组类型
  // ConversationClassify? getClassifyType(Map? extra) {
  //   if (extra == null || extra.isEmpty || !extra.containsKey('category'))
  //     return null;
  //   return ConversationClassify.fromJson(extra['category']);
  // }

  // int get length {
  //   return conversationMap[categoryNormal]?.length ?? 0;
  // }

  // void generateClassifyConvs() {
  //   conversationMap.forEach((key, mapValue) {
  //     if (key != categoryNormal && mapValue.isNotEmpty) {
  //       conversationMap.update(categoryNormal, (value) {
  //         ConversationClassify? convClassify = getClassifyType(
  //             mapValue.entries.first.value.latestMsg?.attributes);
  //         if (convClassify == null) {
  //           return value;
  //         }
  //         ConversationWrapper? wrapper = genConversationWrapper(convClassify);
  //         if (wrapper == null) {
  //           return value;
  //         }
  //         value[wrapper.it.id] = wrapper;
  //         return value;
  //       });
  //     }
  //   });
  // }

  // ConversationWrapper? genConversationWrapper(ConversationClassify classify) {
  //   var convs = conversationMap[classify.type];
  //   if (convs == null || convs.isEmpty) {
  //     return null;
  //   }
  //   EMConversation emConversation = EMConversation.fromJson({
  //     "convId": classify.type,
  //     "type": 0,
  //     "ext": {},
  //   });
  //   ConversationWrapper wrapper = ConversationWrapper(emConversation);
  //   EMTextMessageBody textBody = EMTextMessageBody(
  //       content:
  //           classify.desc?.replaceFirst('{count}', '${convs.length}') ?? '');
  //   wrapper.latestMsg = EMMessage.fromJson({
  //     'body': textBody.toJson(),
  //     'serverTime': convs.values.last.latestMsg?.serverTime
  //   });
  //   wrapper.sender =
  //       MsgListUserItem(avatar: classify.cover, nickname: classify.name);
  //   wrapper.classify = classify;
  //   int num = 0;
  //   for (ConversationWrapper item in convs.values) {
  //     num += item.unReadNum;
  //   }
  //   wrapper.unReadNum = num;

  //   return wrapper;
  // }

  // void updateClassifyConv(ConversationClassify classify) {
  //   ConversationWrapper? wrapper = genConversationWrapper(classify);
  //   if (wrapper != null) {
  //     conversationMap[categoryNormal]
  //         ?.update(wrapper.it.id, (value) => wrapper);
  //   }
  // }
}
